/*
 * Copyright 2004 original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.extremecomponents.table.cell;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import org.apache.commons.lang.StringUtils;
import org.extremecomponents.table.bean.Column;
import org.extremecomponents.table.cell.AbstractCell;
import org.extremecomponents.table.core.TableModel;

/**
 * @author Eccn-sshwsfc
 * state convert to text cell
 * 
 * usage:
 * 
 * <@ec.column property="test" cell="state" parse="enable:disenable:other state"
 */
public class StatusCell extends AbstractCell implements CellForFilter {
	
    protected String getCellValue(TableModel model, Column column) {
        String value = column.getPropertyValueAsString();
        return getParsedValue(model,column,value);
    }

	public String getParsedValue(TableModel model, Column column, Object cellValue) {
		String value = cellValue.toString();
		
		Collection filterOptions = column.getFilterOptions();
		if(filterOptions != null){
			int index = Integer.parseInt(value);
			for(Iterator it = filterOptions.iterator();it.hasNext();){
				FilterOption fo = (FilterOption)it.next();
				if(fo.getValue().toString().equals(value)){
					value = fo.getLabel().toString();
				}
			}
		}else{		
			String logicStr = column.getParse();
	        String[] stateStr = logicStr.split(":");
	        
	        if (StringUtils.isNotBlank(value) && StringUtils.isNumeric(value)) {
	            int index = Integer.parseInt(value);
	            if(index < stateStr.length)
	            {
	            	value = stateStr[index];
	            }
	        }
            filterOptions = new ArrayList();
            filterOptions.add(new StatusFilterOption(value, cellValue.toString()));
            column.setFilterOptions(filterOptions);
		}

        return value;
	}
}
